package demo;

import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 简单的测试框架
 * <p>
 * 当主方法执行后，会自动自行被检测的所有方法(加了Check注解的方法)，判断方法是否有异常，记录到文件中
 */
public class TestCheck {
    public static void main(String[] args) {
        try (//创建字符输出流对象
             FileWriter fw = new FileWriter("Annotation/bug.log");
        ) {
            //1.创建计算器对象
            Calculator c = new Calculator();
            //2.获取计算器对象的Class对象
            Class cls = c.getClass();
            //3.获取对象中的所有方法(Method对象)。
            Method[] methods = cls.getMethods();
            //4.遍历所有方法，执行有@Check注解的方法。
            for (Method method : methods) {
                if (method.isAnnotationPresent(Check.class)) {
                    try {
                        method.invoke(c);
                    } catch (Exception e) {
                        //5.若捕获到异常，则通过字符输出流将发生异常的方法名和异常信息记录到文件中。
                        fw.write(method.getName() + "方法出现异常\r\n");
                        fw.write("异常名称：" + e.getCause().getClass().getName() + "\r\n");
                        fw.write("异常原因：" + e.getCause().getMessage() + "\r\n");
                        fw.write("-------------------------\r\n");
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}